/**
 * _MagicEventApply - _Input 魔术事件之Input事件
 * 2018年11月13日 17点56分
 * nico@coser.pub
 */
module.exports._init = function() {
  this._magicInput = function(e) {
    let dataset = e.currentTarget.dataset;
    let value = e.detail.value;

    let before = { wordsLimit, numberLimit};
    let after = { bindPath };

    value = datasetHandler.bind(this)(dataset, value, before);
    value = datasetHandler.bind(this)(dataset, value, after);

    return value;
  }
}

/**
 * bindPath 绑定数据路径
 * @data-bind-path path 需要绑定的路径
 */
function bindPath(dataset, value){
  this._saveData(dataset["bindPath"], value);
  return value;
}

/**
 * wordsLimit 字数限制
 * @data-words-limit section 字数范围
 */
function wordsLimit(dataset, value){
  this._ArrayEditor(Array);
  let limit = Array.SectionToArray(dataset['wordsLimit']);
  if (limit[1] != 0 && value.length > limit[1]) {
    wx.showToast({ title: '字数超限(<=' + limit[1] + ')', icon: "none" });
  }
  value = value.slice(0, limit[1]);
  return value;
}

/**
 * numberLimit 数字大小限制
 * @data-number-limit section 数字大小范围
 */
function numberLimit(dataset, value) {
  this._ArrayEditor(Array);
  value = Number(value);
  let limit = Array.SectionToArray(dataset['numberLimit']);
  
  if (isNaN(value)){
    return limit[0];
  } else if (limit[1] != 0 && value > limit[1]) {
    wx.showToast({ title: '数字超限(<=' + limit[1] + ')', icon: "none" });
    value = limit[1];
  } 
  // else if (limit[0] != 0 && value < limit[0]) {
  //   wx.showToast({ title: '字数超限(>=' + limit[0] + ')', icon: "none" });
  //   value = limit[0];    
  // }
  return value;
}

/**
 * datasetHandler dataset处理器
 * @param array dataset 
 * @param string value
 * @param object options
 */
function datasetHandler(dataset, value, options) {
  for (let index in dataset) if (dataset.hasOwnProperty(index)) {
    if (options[index]) {
      try {
        value = options[index].bind(this)(dataset, value);
      } catch (e) { console.log(e) }
    }
  }
  return value;
}